/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package visitante;

import DBMS.DataBaseManager;
import clases.*;
import java.io.*;
import java.net.URL;
import java.util.ArrayList;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//import org.apache.log4j.Appender;
//import org.apache.log4j.FileAppender;
//import org.apache.log4j.Logger;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

/**
 *
 * @author andreth
 */
public class Login extends org.apache.struts.action.Action {
//
//    private static final Logger LOGGER = Logger.getLogger(Login.class);
    /*
     * forward name="success" path=""
     */
    private static final String Failure = "failure";
    private static final String Admin = "admin";
    private static final String Unidad = "unidad";

    /**
     * This is the action called from the Struts framework.
     *
     * @param mapping The ActionMapping used to select this instance.
     * @param form The optional ActionForm bean for this request.
     * @param request The HTTP Request we are processing.
     * @param response The HTTP Response we are processing.
     * @throws java.lang.Exception
     * @return
     */
    @Override
    public ActionForward execute(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {

        System.out.println("Llegando a login");
        Registro registro = (Registro) form;
        System.out.println("Casting al form" + registro.getUsuario() + registro.getPassword());
        Usuario usr = new Usuario();
        usr.setUsuario(registro.getUsuario());
        usr.setPassword(registro.getPassword());
        System.out.println("Seteando el usuario " + usr.getPassword() + usr.getUsuario());
        DataBaseManager dbms = DataBaseManager.getInstance();
        DataBaseManager.getUsuarios();
        System.out.println("Luego del get usuarios --------");
        for (Usuario u : DataBaseManager.usuarios) {
            System.out.println(" LOGIN ! -----   Usuario" + u.getUsuario());
        }
        Usuario usuario = dbms.validarRegistro(usr);
        System.out.println(usuario.getPermiso() + "------  PERMISO DEL USUARIO");
        //Consigo recordatorios para el calendario en el sidebar
        Recordatorio recordatorio = new Recordatorio();
        ArrayList<Recordatorio> resultadoConsulta = dbms.consultarRecordatorios(recordatorio);

       inicioSistema();

        if (usuario.getCategoria() != null && usuario.getCategoria().equals("CPYD")) {
            request.getSession().setAttribute("registro", registro);
            ArrayList<Unidad> unidades = DataBaseManager.getInstance().getUnidades();
            request.getSession().setAttribute("unidades", unidades);
//            LOGGER.info("Usuario " + usuario.getUsuario() + " ha iniciado sesion");
//            while (LOGGER.getAllAppenders().hasMoreElements()) {
//                Appender app = (Appender) LOGGER.getAllAppenders().nextElement();
//                System.err.println(app.getName());
//                if (app instanceof FileAppender) {
//                    System.out.println("Appended File");
//                }
//            }
            System.out.println("Es admin!! ");

            request.getSession().setAttribute("logueado", usuario);
            request.getSession().setAttribute("Ruta", new Ruta("Accion: Inicio Director CPYD"));
            return mapping.findForward(Admin);
        } else if (usuario.getCategoria() != null
                && (!usuario.getCategoria().isEmpty()
                || usuario.getCategoria().equalsIgnoreCase("Admin Unidad"))) {
            request.getSession().setAttribute("registro", registro);
            request.getSession().setAttribute("categoria", usuario.getCategoria());
            Recordatorio r;
            if (resultadoConsulta.size() > 0) {
                r = resultadoConsulta.get(0);
            }
            else{
                r = null;
            }

            if (r != null) {
                Date fechaActual = new Date();
                SimpleDateFormat formato = new SimpleDateFormat("dd/MM/yyyy");
                String cadenaFecha = formato.format(fechaActual);
                if (recordatorioVigente(cadenaFecha, r.getFechaFin())) {
                    //if (true) {
                    request.setAttribute("recordatorio", r);
                    System.out.println("el recordatorio es " + r.getNombre());
                    request.setAttribute("preparacion", "ok");

                } else {
                    if (dbms.eliminarRecordatorio(r)) {
                        r.setMensajeOK("Recordatorio eliminado"
                                + "con exito");
                        request.setAttribute("recordatorio", r);
                    } else {
                        r.setMensaje("No se puedo eliminar el"
                                + "recordatorio.");
                        request.setAttribute("recordatorio", r);
                    }
                }
                // Aqui monto recordatorio
                //seteando recordatorios para recoger en la vista
                
            }

//            LOGGER.info("test");
            System.out.println("Es admin de unidad login");
            request.setAttribute("recordatorios", resultadoConsulta);
            if (resultadoConsulta.isEmpty()){
                usuario.setMensaje("Usted no tiene ninguna matriz que completar");
            }
            request.getSession().setAttribute("logueado", usuario);
            request.getSession().setAttribute("Ruta", new Ruta("Accion: Inicio Unidad"));
            return mapping.findForward(Unidad);
        } else {
            registro.setMensaje("Usuario no registrado o clave invalida");
            request.setAttribute("registro", registro);
//            LOGGER.error("Usuario Invalido");

            request.getSession().setAttribute("logueado", usuario);
            request.getSession().setAttribute("Ruta", new Ruta("Accion: Login Fallido"));
            return mapping.findForward(Failure);
        }
    }

    public boolean recordatorioVigente(String fechaHoy, String fechaFin) {
        String[] hoy;
        String[] fin;
        hoy = fechaHoy.split("/");
        fin = fechaFin.split("/");
        if (Integer.parseInt(fin[2]) < Integer.parseInt(hoy[2])) {
            System.out.println("yyyy");
            return false;
        } else if (Integer.parseInt(fin[1]) < Integer.parseInt(hoy[1])) {
            System.out.println("MM");
            return false;
        } else if (Integer.parseInt(fin[0]) < Integer.parseInt(hoy[0])) {
            System.out.println("dd");
            return false;
        }
        return true;

    }
    
   private void inicioSistema(){
        DataBaseManager.consultarFechas();
    }
}
